package com.iplay.实战java高并发程序设计.chapter5.c510;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.security.spec.ECGenParameterSpec;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.LockSupport;

/**
 * @author dangwu
 * @since 2021/11/9 5:21 下午
 */
public class HeavySocketClient {
    private static ExecutorService executorService = Executors.newCachedThreadPool();
    private static final int sleep_time = 1000*1000*1000;
    public static class EchoClient implements Runnable{
        public EchoClient(){
            System.out.println("init");
        }
        String word = null;
        public EchoClient(String word){
            this.word = word;
        }
        @Override
        public void run() {
            Socket client = null;
            PrintWriter writer = null;
            BufferedReader reader = null;
            try {
                client = new Socket();
                client.connect(new InetSocketAddress("localhost",8000));
                writer = new PrintWriter(client.getOutputStream(),true);
                writer.print(word);
                LockSupport.parkNanos(sleep_time);
                writer.println();
                writer.flush();
                reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                System.out.println("from server: "+reader.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if (writer != null) writer.close();
                    if (reader != null) reader.close();
                    if (client != null) client.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }
    }

    public static void main(String[] args) {
        EchoClient client = new EchoClient("123");
        for (int i = 0; i < 10; i++) {
            executorService.execute(client);
        }
    }
}
